winsafe\user\handles/
hcursor.rs

1#![allow(non_camel_case_types, non_snake_case)]
2
3use crate::co;
4use crate::decl::*;
5use crate::guard::*;
6use crate::kernel::privs::*;
7use crate::user::ffi;
8
9handle! { HCURSOR;
10	/// Handle to a
11	/// [cursor](https://learn.microsoft.com/en-us/windows/win32/winprog/windows-data-types#hcursor).
12}
13
14impl HCURSOR {
15	/// [`CopyCursor`](https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-copycursor)
16	/// macro.
17	#[must_use]
18	pub fn CopyCursor(&self) -> SysResult<DestroyCursorGuard> {
19		unsafe {
20			ptr_to_sysresult_handle(ffi::CopyIcon(self.ptr())).map(|h| DestroyCursorGuard::new(h))
21		}
22	}
23
24	/// [`GetCursor`](https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getcursor)
25	/// function.
26	#[must_use]
27	pub fn GetCursor() -> Option<HCURSOR> {
28		ptr_to_option_handle(unsafe { ffi::GetCursor() })
29	}
30
31	/// [`SetSystemCursor`](https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setsystemcursor)
32	/// function.
33	pub fn SetSystemCursor(&self, id: co::OCR) -> SysResult<()> {
34		bool_to_sysresult(unsafe { ffi::SetSystemCursor(self.ptr(), id.raw()) })
35	}
36}